package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import java.util.Map;

/**
 * 最终答案之锁服务接口
 */
public interface IFinalAnswerService {

    /**
     * 创建最终答案锁
     * @param userId 用户ID
     * @param title 标题
     * @param description 描述
     * @param password 密码
     * @param unlockDate 解锁日期
     * @return 创建结果
     */
    Map<String, Object> createFinalAnswerLock(Long userId, String title, String description, 
                                             String password, String unlockDate);

    /**
     * 上传答案内容
     * @param lockId 锁ID
     * @param contentType 内容类型：text/image/video/audio
     * @param content 内容
     * @param filePath 文件路径（如果是文件）
     * @return 上传结果
     */
    Map<String, Object> uploadAnswerContent(Long lockId, String contentType, String content, String filePath);

    /**
     * 尝试解锁
     * @param lockId 锁ID
     * @param password 密码
     * @param userId 用户ID
     * @return 解锁结果
     */
    Map<String, Object> attemptUnlock(Long lockId, String password, Long userId);

    /**
     * 执行解锁仪式
     * @param lockId 锁ID
     * @param userId 用户ID
     * @return 仪式结果
     */
    Map<String, Object> performUnlockRitual(Long lockId, Long userId);

    /**
     * 获取用户的答案锁列表
     * @param userId 用户ID
     * @param status 状态过滤：all/locked/unlocked/expired
     * @return 锁列表
     */
    Map<String, Object> getUserAnswerLocks(Long userId, String status);

    /**
     * 获取答案锁详情
     * @param lockId 锁ID
     * @param userId 用户ID
     * @return 锁详情
     */
    Map<String, Object> getAnswerLockDetails(Long lockId, Long userId);

    /**
     * 更新答案锁信息
     * @param lockId 锁ID
     * @param userId 用户ID
     * @param title 新标题
     * @param description 新描述
     * @param unlockDate 新解锁日期
     * @return 更新结果
     */
    Map<String, Object> updateAnswerLock(Long lockId, Long userId, String title, 
                                        String description, String unlockDate);

    /**
     * 删除答案锁
     * @param lockId 锁ID
     * @param userId 用户ID
     * @return 删除结果
     */
    Map<String, Object> deleteAnswerLock(Long lockId, Long userId);

    /**
     * 修改密码
     * @param lockId 锁ID
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 修改结果
     */
    Map<String, Object> changePassword(Long lockId, Long userId, String oldPassword, String newPassword);

    /**
     * 获取解锁历史
     * @param lockId 锁ID
     * @param userId 用户ID
     * @return 解锁历史
     */
    Map<String, Object> getUnlockHistory(Long lockId, Long userId);

    /**
     * 设置解锁提醒
     * @param lockId 锁ID
     * @param userId 用户ID
     * @param reminderTime 提醒时间
     * @param reminderMessage 提醒消息
     * @return 设置结果
     */
    Map<String, Object> setUnlockReminder(Long lockId, Long userId, String reminderTime, String reminderMessage);

    /**
     * 获取即将到期的锁
     * @param userId 用户ID
     * @param days 天数范围
     * @return 即将到期的锁列表
     */
    Map<String, Object> getUpcomingUnlocks(Long userId, Integer days);

    /**
     * 分享答案锁
     * @param lockId 锁ID
     * @param userId 用户ID
     * @param shareType 分享类型：link/qr_code
     * @return 分享结果
     */
    Map<String, Object> shareAnswerLock(Long lockId, Long userId, String shareType);

    /**
     * 获取答案锁统计
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getAnswerLockStatistics(Long userId);

    /**
     * 验证密码强度
     * @param password 密码
     * @return 验证结果
     */
    Map<String, Object> validatePasswordStrength(String password);

    /**
     * 生成随机密码
     * @param length 密码长度
     * @param includeSpecialChars 是否包含特殊字符
     * @return 生成的密码
     */
    Map<String, Object> generateRandomPassword(Integer length, Boolean includeSpecialChars);

    /**
     * 备份答案锁
     * @param lockId 锁ID
     * @param userId 用户ID
     * @return 备份结果
     */
    Map<String, Object> backupAnswerLock(Long lockId, Long userId);

    /**
     * 恢复答案锁
     * @param backupId 备份ID
     * @param userId 用户ID
     * @return 恢复结果
     */
    Map<String, Object> restoreAnswerLock(Long backupId, Long userId);

    /**
     * 恢复答案
     * @param answerId 答案ID
     * @param userId 用户ID
     * @return 恢复结果
     */
    Map<String, Object> restoreAnswer(Long answerId, Long userId);
}
